package com.ruoyi.tws.api.domain;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.MyPlusEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

/**
 * 订单对象 tws_order
 * 
 * @author ruoyi
 * @date 2022-02-08
 */
@Data
@ToString
@EqualsAndHashCode
@NoArgsConstructor
@Accessors(chain = true)
@TableName("tws_order")
public class Order extends MyPlusEntity {
    private static final long serialVersionUID = 1L;

    /** id */
    @TableId
    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;

    /**
     * 1、订单部分
     */
    /** 上游企业委托运输单号 */
    @Excel(name = "上游企业委托运输单号")
    private String originalDocumentNumber;

    /** 运单号 */
    @Excel(name = "运单号")
    private String shippingNoteNumber;

    /** 分段分单号 */
    @Excel(name = "分段分单号")
    private String serialNumber;

    /** 运输总车辆数 */
    @Excel(name = "运输总车辆数")
    private Integer vehicleAmount;

    /** 运输组织类型 */
    @Excel(name = "运输组织类型")
    private Integer transportTypeCode;

    /** 业务类型 */
    @Excel(name = "业务类型")
    private String businessTypeCode;

    /** 运费金额 */
    @Excel(name = "运费金额")
    private BigDecimal totalMonetaryAmount;

    /** 保险单号 */
    @Excel(name = "保险单号")
    private String policyNumber;

    /** 保险公司 */
    @Excel(name = "保险公司")
    private String insuranceCompanyCode;

    /** 预计出发时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "出发时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date leaveTime;

    /** 用车需求 */
    @Excel(name = "用车需求")
    private String carNeed;

    /** 备注 */
    @Excel(name = "备注")
    private String remark;

    /**
     * 2、装货部分
     */
    /** 托运人名称 */
    @Excel(name = "托运人名称")
    private String consignor;

    /** 托运人统一社会信用代码或个人证件号 */
    @Excel(name = "托运人统一社会信用代码或个人证件号")
    private String consignorId;

    /** 装货联系人电话 */
    private String loadLinkTel;

    /** 装货地址 */
    @Excel(name = "装货地址")
    private String placeOfLoading;

    /** 装货地点的国家行政区划代码或国别代码 */
    @Excel(name = "装货地点的国家行政区划代码或国别代码")
    private String countrySubdivisionCode;

    /** 起点位置经度 */
    private String startLongitude;

    /** 起点位置纬度 */
    private String startLatitude;

    /**
     * 3、收货部分
     */
    /** 收货方名称 */
    @Excel(name = "收货方名称")
    private String consignee;

    /** 收货方统一社会信用代码或个人证件号码 */
    @Excel(name = "收货方统一社会信用代码或个人证件号码")
    private String consigneeId;

    /** 收货联系人电话 */
    private String receiptLinkTel;

    /** 收货地址 */
    @Excel(name = "收货地址")
    private String goodsReceiptPlace;

    /** 收货地点的国家行政区划代码或国别代码 */
    @Excel(name = "收货地点的国家行政区划代码或国别代码")
    private String countrySubdivisionCodeS;

    /** 到达位置经度 */
    private String endLongitude;

    /** 到达位置纬度 */
    private String endLatitude;

    /**
     * 4、承运部分（承运人、司机、车辆）
     */
    /** 实际承运人名称 */
    @Excel(name = "实际承运人名称")
    private String actualCarrierName;

    /** 实际承运人道路运输经营许可证号 */
    @Excel(name = "实际承运人道路运输经营许可证号")
    private String actualCarrierBusinessLicense;

    /** 实际承运人统一社会信用代码或证件号码 */
    @Excel(name = "实际承运人统一社会信用代码或证件号码")
    private String actualCarrierId;

    /** 司机id */
    @Excel(name = "司机id")
    @JsonSerialize(using = ToStringSerializer.class)
    private Long driverId;

    /** 司机身份证号 */
    private String driverLicense;

    /** 司机名 */
    @Excel(name = "司机名")
    private String driverName;

    /** 司机电话 */
    @Excel(name = "司机电话")
    private String driverPhone;

    /** 车辆id */
    @JsonSerialize(using = ToStringSerializer.class)
    private Long vehicleId;

    /** 车辆牌照号 */
    @Excel(name = "车辆牌照号")
    private String vehicleNumber;

    /** 车牌颜色 */
    @Excel(name = "车牌颜色")
    private String vehiclePlateColorCode;

    /** 挂车id */
    @JsonSerialize(using = ToStringSerializer.class)
    private Long trailerVehicleId;

    /** 挂车牌照号 */
    @Excel(name = "挂车牌照号")
    private String trailerVehiclePlateNumber;

    /** 挂车牌照颜色代码 */
    @Excel(name = "挂车牌照颜色代码")
    private String trailerVehiclePlateColorCode;

    /** 发货时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "发货时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date despatchActualDateTime;

    /** 收货时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "收货时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date goodsReceiptDateTime;

    /**
     * 5、订单完成后的部分（回单、评价、上传）
     */
    /** 是否回单 0否 1是 */
    @Excel(name = "是否回单")
    private String isReceipt;

    /** 回单上传的图片 */
    @Excel(name = "回单上传的图片")
    private String backImages;

    /** 评价星级 货源方 */
    private Integer starCompany;

    /** 评价星级 司机 */
    private Integer starDriver;

    /** 订单状态 */
    @Excel(name = "订单状态")
    private String status;

    /** 是否支付 0否 1是 */
    private String isPay;

    /** 是否开了发票 0否 1是 */
    private String isBill;

    /** 是否已上传 0未上传 1已上传 */
    @Excel(name = "是否已上传")
    private String isSendToPro;

    /** 运单上传时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "运单上传时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date sendToProDateTime;

    /** $column.columnComment */
    private String tenantId;

    /** 物流公司名称 */
    private String companyName;

    // 订单货物
    @TableField(exist = false)
    private List<OrderGoods> orderGoods;

    // 司机
    @TableField(exist = false)
    private List<Driver> drivers;

    @TableField(exist = false)
    private String recordContent;

    //解除申请ID
    @TableField(exist = false)
    private Long secureId;

    //变更申请ID
    @TableField(exist = false)
    private Long changeId;
}
